package com.shm.leetcode;

import java.util.Arrays;

/**
 * 557. 反转字符串中的单词 III
 * 给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。
 *
 *
 *
 * 示例：
 *
 * 输入："Let's take LeetCode contest"
 * 输出："s'teL ekat edoCteeL tsetnoc"
 *
 *
 * 提示：
 *
 * 在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。
 * @author SHM
 */
public class ReverseWords {
    public String reverseWords(String s) {
        String[] s1 = s.split(" ");
        StringBuilder stringBuffer = new StringBuilder();
        for (String s2 : s1) {
            stringBuffer.append(new StringBuffer(s2).reverse()).append(" ");
        }
        return stringBuffer.toString().substring(0,s.length());
    }

    public String reverseWords_2(String s) {
        char[] chars = s.toCharArray();
        int begin = 0;
        int lens = s.length();

        for (int i = 0; i < lens; i++) {
            if (chars[i]==' '){
                reversec(chars,begin,i-1);
                begin=i+1;
            }
        }
        reversec(chars,begin,lens-1);
        // 转换成字符串返回
        return new String(chars);
    }

    public void reversec(char[] chars,int k,int i){
        while (k<i){
            char tmp = chars[k];
            chars[k] = chars[i];
            chars[i] = tmp;
            k++;
            i--;
        }
    }
}
